package com.leetcode.sorts.string;

/**
 * @Author: WuPeng
 * @Date: 2021/5/27 5:20 下午
 *
 * 541: 反转字符串2
 * 给定一个字符串 s 和一个整数 k，你需要对从字符串开头算起的每隔2k 个字符的前 k 个字符进行反转。
 *
 * 如果剩余字符少于 k 个，则将剩余字符全部反转。
 * 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
 *
 * 示例:
 *      输入: s = "abcdefg", k = 2
 *      输出: "bacdfeg"
 *
 * 提示：
 *      该字符串只包含小写英文字母。
 *      给定字符串的长度和 k 在 [1, 10000] 范围内。
 *
 */
public class ReverseString_541 {

    public static String reverseString(String str, int k){
        char[] chars = str.toCharArray();
        for (int i=0; i<str.length(); i += 2*k){
            int start = i, end = Math.min(i+k-1, chars.length-1);
            while (start < end){
                chars[start] ^= chars[end];
                chars[end] ^= chars[start];
                chars[start++] ^= chars[end--];
            }
        }
        return new String(chars);
    }


    public static void main(String[] args) {
        String str = "abcdefg";
        String s = reverseString(str, 2);
        System.out.println(s);
    }

}
